home *** CD-ROM | disk | FTP | other *** search
/ Spanish Scene 1 / SpanishScene1.iso / spanish pack n°1 by llfb / --llfb-- / programas / sources1.dms / sources1.adf / SOURCES / Vectores / Spaceship_in_Starsfield.ASM < prev    next >
Assembly Source File  |  1996-06-04  |  13KB  |  489 lines

  1. ;RAYTRACING FILL BY LADO OF FI-RE CREW IN 1992 !
  2.     
  3.     
  4. ;    org $25000
  5. ;    load $25000
  6.     
  7.     Section    Roman,code_c
  8.  
  9. ;    >extern 'DF0:raytr.dat',sinus
  10.     
  11.  
  12. j    lea $30000,a0             ;memoria torlese
  13. lo    clr.l (a0)+
  14.     cmp.l #$70000,a0
  15.     bcs lo
  16.     
  17.     bsr makecor
  18.     bsr makemul
  19.     bsr makeset
  20.  
  21.     lea $dff000,a6           ;custom
  22. fvv    move.l 4(a6),d0
  23.     lsr.l #8,d0
  24.     cmp.w #$130,d0
  25.     bne fvv
  26.     move.w #$7fff,$96(a6)    ;clear  DMACON
  27.     move.w #$7fff,$9a(a6)    ;clear  INTENA
  28.     move.l #copper,$84(a6)   
  29.     clr.w $8a(a6)            ;start copper
  30.     move.w #$87d0,$96(a6)    ;DMACON
  31.     move.w #$c010,$9a(a6)
  32.  
  33. h1    bsr wait                 ;waitblitter
  34. h2    move.l 4(a6),d0
  35.     lsr.l #8,d0
  36.     cmp.w #$d0,d0
  37.     bne h2
  38.     bsr calfil
  39.     bsr calstr
  40.     bsr clrstr
  41.     bsr setstr
  42.     bsr filler
  43.     btst #6,$bfe001
  44.     bne h1
  45.     bsr wait
  46.     
  47.     move.w #$7fff,$96(a6)
  48.     move.w #$7fff,$9a(a6)
  49.     clr.w $88(a6)            ;start original copper
  50.     move.w #$87f0,$96(a6)
  51.     move.w #$e02c,$9a(a6)
  52.     clr.l d0
  53.     rts                      ;END
  54.     
  55.  
  56. calfil    add.w #0,addx           ;xszog novelese
  57.     and.w #$1ff,addx   
  58.     add.w #2,addy           ;yszog novelese    
  59.     and.w #$1ff,addy
  60.     subq.w #1,lass
  61.     bne noadd
  62.     move.w #6,lass
  63.     add.w #2,addz           ;zszog novelese        
  64.     and.w #$1ff,addz
  65. noadd    lea coords(pc),a0        ;kocka pontjainak x,y,z koordinatai
  66.     lea sinus(pc),a1         ;sinus ertekek
  67.     lea $80(a1),a3           ;cosinus ertekek
  68.     lea tarolo1(pc),a2        ;2D x,y letarolasa
  69.     lea addx(pc),a4          ;szogek
  70.     lea tarolo2(pc),a5
  71.     moveq #3,d7              ;8 pont van /kocka/
  72. h3    movem.w (a0)+,d0/d1/d6   ;x,y,z
  73.     move.w 4(a4),d5          ;Zszog
  74.     bsr calcul               ;Z-rotation
  75.     move.w d0,d6             ;X tarolasa
  76.     move.w d3,d0             ;Y
  77.     move.w (a4),d5           ;Xszog
  78.     bsr calcul               ;X-rotation
  79.     move.w d0,d6             ;uj Y tarolasa
  80.     move.w d3,d0             ;Z
  81.     move.w 2(a4),d5          ;Yszog
  82.     bsr calcul               ;Y-rotation
  83.     exg d0,d3                ;X csere Z-vel    Z=d3
  84.     move.w d0,(a2)+   ;x,y,z storage
  85.     move.w d1,(a2)+
  86.     move.w d3,(a2)+
  87.     moveq #11,d6
  88.     move.w #$400,d2
  89.     sub.w d3,d2              ;$444-Z
  90.     muls d2,d0               ;z'*x
  91.     asr.l d6,d0              ;z'*x/2048=2D X
  92.     muls d2,d1               ;z'*y
  93.     asr.l d6,d1              ;z'*y/2048=2D Y
  94.     add.w #150,d0         ;X=X+150     kozepre a kepernyon           
  95.     add.w #100,d1            ;Y=Y+100
  96.     move.w d0,(a5)+
  97.     move.w d1,(a5)+
  98.     dbf d7,h3                ;8-szor               
  99.  
  100.     move.l #$ffff8000,$72(a6)  ;vonalhuzashoz standard ertekek
  101.     move.l #$ffffffff,$44(a6)
  102.     move.w #120,$60(a6)        ;kepernyo szelessege
  103.  
  104.     eor.w #$8000,erno+2        ;kepernyo cserek
  105.     eor.w #$8000,copscr       ;cserek a copperben is
  106.     eor.w #$8000,copscr+4
  107.     eor.w #$8000,copscr+8
  108.     eor.w #$8000,erny+2
  109.     eor.w #$8000,copscr+12
  110.     eor.w #$8000,copscr+16
  111.     eor.w #$8000,copscr+20
  112.  
  113.     move.l erno(pc),a0            ;aktualis kepernyo
  114.     add.l #26+[166*$78],a0          ;az object jobb also oldala
  115.     bsr wait                            ;wait blitter
  116.     move.l #$01000002,$40(a6)       ;USE D,DESC/csokkeno uzemmod/
  117.     move.w #$28-[[10*16]/8],$66(a6)    ;DMOD
  118.     move.l a0,$54(a6)        ;D cel
  119.     move.w #$640a,$58(a6)           ;vert.-hor. size  start bl.
  120.     rts
  121.     
  122. filler    lea tarolo2(pc),a1          ;2D x,y ertekek
  123.     lea meghat(pc),a2          ;structure
  124.     lea sinus+$400(pc),a3      ;sor kezdopontja /0-f/ + $a4a or $b4a
  125.     lea sinus+$680(pc),a5      ;szelesseg/2/ es vonal hossz values
  126.     move.w (a2)+,lap           ;lapok szama /6/
  127. h7    move.l (a2)+,d7            ;hany pontot kosson ossze
  128.     move.l (a2)+,a4            ;oszzekotesi sorrend
  129.     move.l (a2)+,scr           ;melyik kepernyore
  130.     move.l (a2)+,col           ;mutato a szinpalettara,melyik szin a copp.
  131.     move.l erno(pc),a0         ;ide rajzol
  132.     movem.w (a4),d0/d1/d2      ;lathatosag eldontese
  133.     move.w (a1,d1.w),d3        ;x1
  134.     sub.w (a1,d0.w),d3         ;X1-X0
  135.     move.w 2(a1,d2.w),d4       ;y2
  136.     sub.w 2(a1,d1.w),d4        ;Y2-Y1
  137.     move.w 2(a1,d1.w),d5       ;y1
  138.     sub.w 2(a1,d0.w),d5        ;Y1-Y0
  139.     move.w (a1,d2.w),d6        ;x2
  140.     sub.w (a1,d1.w),d6         ;X2-X1
  141.     mulu d4,d3                 ;(y2-y1)(x1-x0)=d3
  142.     mulu d6,d5                 ;(y1-y0)(x2-x1)=d5
  143.     sub.w d5,d3                
  144.     bmi vakon                   ;nem latszik
  145.     moveq #10,d5                ;1024
  146.     lsr.w d5,d3                 ;d3=d3/1024
  147.     and.l #$f,d3              ;also 4 bit levalasztasa
  148.     add.w d3,d3                ;word
  149.     movem.l a0/a1,-(a7)
  150.     lea colors(pc),a0          ;szinek
  151.     lea copcol(pc),a1          ;copperben a szinek
  152.     add.w col(pc),a0           ;uj szin
  153.     add.w col+2(pc),a1         ;melyik szin a copperban
  154.     move.w (a0,d3.w),d3        ;uj szin bekerese
  155.     move.w d3,(a1)             ;beirasa a copperbe
  156.     movem.l (a7)+,a0/a1
  157.     
  158.     move.w (a4)+,d5            ;1.pont
  159.     move.w (a1,d5.w),d0        ;x1 koordinata
  160.     move.w 2(a1,d5.w),d1       ;y1 koordinata
  161.     bsr lines                  ;vonalhuzo
  162. vakon    subq.w #1,lap              ;lapszam csokkentes
  163.     bne h7                     ;van meg ?
  164.     bra fill                   ;nincs , go fill
  165.  
  166. lines    move.w (a4)+,d5          ;kovetkezo pont
  167.     move.w (a1,d5.w),d2      ;x2
  168.     move.w 2(a1,d5.w),d3     ;y2
  169.     movem.w d2/d3,-(a7)      ;kovetkezo pont latarolasa
  170.     cmp.w d1,d3              ;y2-y1
  171.     bgt p1
  172.     exg d0,d2                ;kisebb --> coords csere                
  173.     exg d1,d3                ;mindig a nagyobb y-bol kell huzni !
  174.     beq not                  
  175. p1    move.w #120,d5           ;kepernyo szelessege
  176.     move.w d1,d4             ;nagyobb y
  177.     mulu d5,d4               ;120*y = pont sora
  178.     move.w d0,d5             ;x0
  179.     add.l a0,d4              ;$30000+x0 = pont oszlopa
  180.     lsr.w #3,d5              ;pont sora/8
  181.     add.w d5,d4              ;megkapja a pont helyet
  182.     moveq #0,d5
  183.     sub.w d1,d3              ;Y
  184.     sub.w d0,d2              ;X   /x1-x2/
  185.     bpl p2
  186.     moveq #1,d5              ;x2 kisebb volt,a kapott X negativ 
  187.     neg.w d2                 ;most mar pozitiv X
  188. p2    move.w d3,d1             ;Y
  189.     add.w d1,d1              ;2Y
  190.     cmp.w d2,d1              ;X-2Y
  191.     dbhi d3,p3               ;csokkenti Y-t ha
  192. p3    move.w d3,d1             ;Y
  193.     sub.w d2,d1              ;Y-X
  194.     bpl p4
  195.     exg d2,d3                ;X csereje Y-al
  196. p4    addx.w d5,d5
  197.     add.w d2,d2              ;2Y             
  198.     move.w d2,d1             ;2Y
  199.     sub.w d3,d2              ;2Y-X
  200.     addx.w d5,d5
  201.     add.w d0,d0
  202.     move.w d2,d6
  203.     sub.w d3,d6
  204.     add.w d3,d3
  205. ok    move.w (a5,d3.w),d3         ;$58
  206.     move.w (a3,d0.w),d0         ;$40
  207.     move.b dat(pc,d5.w),d5      ;melyik siknyolcad
  208.     bsr okvonal                 ;vonalrajz
  209. not    movem.w (a7)+,d0/d1
  210.     dbf d7,lines
  211.     rts
  212. dat    dc.l $3431353,$b4b1757     ;siknyolcad    
  213.  
  214. okvonal    move.l d7,-(a7)
  215.     moveq #2,d7                ;3 lehetoseg
  216.     swap d2                    ;a d2-ot felhasznalom
  217.     move.w scr+2(pc),d2        ;melyik kepernyore
  218. loop    lsr.w #1,d2                ;az also 3 bit donti el
  219.     bcc noo                    ;Carry=0 --> nem kell
  220.     bsr wait
  221.     swap d2                    ;eredeti d2
  222.     move.w d2,$52(a6)           ;2y-x
  223.     move.w d0,$40(a6)           ;12-15-->sor kezdopontja /0-f/ + a4a
  224.     move.b d5,$43(a6)           ;siknyolcad
  225.     move.l d4,$48(a6)           ;vonal kezdocime
  226.     move.l d4,$54(a6)           ;vonal kezdocime
  227.     move.w d1,$62(a6)           ;2y
  228.     move.w d6,$64(a6)           ;2y-2x
  229.     move.w d3,$58(a6)           ;szelesseg=2 , magassag=vonal hossza
  230.     swap d2
  231. noo    add.l #$28,d4                ;kovetkezo kepernyo
  232.     dbf d7,loop
  233.     move.l (a7)+,d7
  234.     rts
  235.         
  236. fill    move.l erno(pc),a0              ;aktualis kepernyo
  237.     add.l #26+[166*$78],a0            ;az object jobb also sarka
  238.     bsr wait                        ;blitter ready ?
  239.     move.l #$9f00012,$40(a6)        ;USE AD,LF:A=D,EFE,DESC  FCI=0 !
  240.     move.w #$28-[[10*16]/8],$64(a6)    ;AMOD
  241.     move.w #$28-[[10*16]/8],$66(a6)    ;DMOD
  242.     move.l a0,$50(a6)                  ;A forras
  243.     move.l a0,$54(a6)        ;D cel
  244.     move.w #$640a,$58(a6)           ;vert.-hor. size  h=160
  245.     rts
  246.     
  247. calcul    move.w (a3,d5.w),d4     ;cos ertek
  248.     move.w (a1,d5.w),d5     ;sin ertek
  249.     move.w d0,d2            ;c1
  250.     move.w d1,d3        ;c2
  251.     muls d4,d0        ;c1*cos(c0angle)
  252.     muls d5,d1        ;c2*sin(c0angle)
  253.     muls d4,d3        ;c2*cos(c0angle)
  254.     muls d5,d2        ;c1*sin(c0angle)
  255.     sub.l d1,d0        ;c1*cos(c0angle)-c2*sin(c0angle)
  256.     add.l d2,d3        ;c2*cos(c0angle)+c1*sin(c0angle)
  257.     add.l d0,d0        
  258.     add.l d3,d3
  259.     swap d0                 ;uj c1
  260.     swap d3                 ;uj c2
  261.     move.w d6,d1        
  262.     rts
  263.  
  264. ;**********************************************************************
  265.  
  266. calstr    lea tarolo1(pc),a0
  267.     movem.w (a0),d0-d2
  268.     asr.w #3,d0
  269.     asr.w #3,d1
  270.     asr.w #2,d2
  271.     add.w d0,d0
  272.     add.w d1,d1
  273.     add.w d2,d2
  274.     lea scoord(pc),a0
  275.     moveq #$31,d7
  276.     move.w #$400,d6
  277.     move.w #$1fff,d5
  278.     move.w #$7fe,d4
  279.     add.w #$400,d0
  280.     add.w #$400,d1
  281. km1    move.w (a0),d3
  282.     add.w d0,d3
  283.     and.w d4,d3
  284.     sub.w d6,d3
  285.     move.w d3,(a0)+
  286.     move.w (a0),d3
  287.     add.w d1,d3
  288.     and.w d4,d3
  289.     sub.w d6,d3
  290.     move.w d3,(a0)+
  291.     add.w d2,(a0)
  292.     and.w d5,(a0)+
  293.     dbf d7,km1
  294.     rts
  295.  
  296. setstr    lea scoord(pc),a0
  297.     move.l erny(pc),a1
  298.     lea tarolo3(pc),a3
  299.     lea szor(pc),a5
  300.     moveq #$31,d7
  301.     move.w #$a0,d4
  302. km7    movem.w (a0)+,d0-d2
  303.     muls (a5,d2.w),d0
  304.     muls (a5,d2.w),d1
  305.     swap d0
  306.     swap d1
  307.     add.w d4,d0
  308.     add.w d4,d1
  309.     cmp.w #$c0,d1
  310.     bhi nott
  311.     cmp.w #$13f,d0
  312.     bhi nott
  313.     cmp.w #$7d0,d2
  314.     blt two
  315.     cmp.w #$1388,d2
  316.     blt tree
  317.     move.b sets(pc,d0.w),d6        ;melyik bitet kell setbe
  318.     asr.w #3,d0                        ;x/8 --> oszlop
  319.     mulu #$78,d1             ;y*$78 --> sor
  320.     add.w d1,d0                     ;pont helye
  321.     move.w d0,(a3)+
  322.     or.b d6,(a1,d0.w)               ;pont bekapcsolasa
  323.     dbf d7,km7
  324.     rts
  325. two    move.b sets(pc,d0.w),d6
  326.     asr.w #3,d0
  327.     mulu #$78,d1
  328.     add.w d1,d0
  329.     move.w d0,(a3)+
  330.     or.b d6,(a1,d0.w)
  331.     or.b d6,$28(a1,d0.w)
  332.     dbf d7,km7
  333.     rts
  334. tree    move.b sets(pc,d0.w),d6
  335.     asr.w #3,d0
  336.     mulu #$78,d1
  337.     add.w d1,d0
  338.     move.w d0,(a3)+
  339.     or.b d6,$28(a1,d0.w)
  340. nott    dbf d7,km7
  341.     rts
  342.         
  343. sets    blk.w 160,0
  344.  
  345. clrstr    move.l erny(pc),a1
  346.     lea $28(a1),a2
  347.     lea tarolo3(pc),a3
  348.     lea tarolo4(pc),a4
  349.     moveq #$31,d7
  350. km8    move.w (a4),d0
  351.     move.w (a3)+,(a4)+
  352.     clr.b (a1,d0.w)
  353.     clr.b (a2,d0.w)
  354.     dbf d7,km8
  355.     rts
  356.  
  357.     
  358. makecor    lea scoord(pc),a0
  359.     moveq #$3f,d7
  360. km2    move.w #$40,d0
  361.     bsr szami
  362.     sub.w #$20,d0
  363.     muls #$20,d0
  364.     move.w d0,(a0)+
  365.     move.w #$40,d0
  366.     bsr szami
  367.     sub.w #$20,d0
  368.     muls #$20,d0
  369.     move.w d0,(a0)+
  370.     move.w #$1f4,d0
  371.     bsr szami
  372.     mulu #$10,d0
  373.     move.w d0,(a0)+
  374.     dbf d7,km2
  375.     rts
  376.  
  377. szami    move.w d0,d5
  378.     move.w d5,d4
  379.     subq.w #1,d4
  380.     move.l numi(pc),d0
  381. km3    add.l d0,d0
  382.     bhi km4
  383.     eor.l #$1d872b41,d0
  384. km4    lsr.w #1,d4
  385.     bne km3
  386.     move.l d0,numi
  387.     tst.w d5
  388.     bne km5
  389.     swap d0
  390.     bra km6
  391. km5    mulu d5,d0
  392. km6    clr.w d0
  393.     swap d0
  394.     rts
  395.  
  396. makemul    lea szor(pc),a0
  397.     move.w #$effc,d0
  398.     move.w #$1000,d1
  399. km10    move.w #$2bc,d2
  400.     move.w #$2bc,d4
  401.     move.w #$8000,d3
  402.     muls d3,d2
  403.     sub.w d0,d4
  404.     divs d4,d2
  405.     move.w d2,(a0)+
  406.     addq.w #1,d0
  407.     dbf d1,km10
  408.     rts
  409.  
  410. makeset    lea sets(pc),a0
  411.     move.w #39,d7
  412. km11    move.l #$80402010,(a0)+
  413.     move.l #$08040201,(a0)+
  414.     dbf d7,km11
  415.     rts
  416.  
  417.  
  418. wait    btst #$e,2(a6)          ;waitblitter
  419.     bne wait
  420.     rts
  421.  
  422.  
  423.  
  424. copper    dc.w $100,$200,$8e,$2c81,$90,$2cc1,$92,$38,$94,$d0
  425.     dc.w $120,0,$122,0,$124,0,$126,0,$128,0,$12a,0,$12c,0,$12e,0
  426.     dc.w $130,0,$132,0,$134,0,$136,0,$138,0,$13a,0,$13c,0,$13e,0
  427.     dc.w $180,0,$108,$50,$10a,$50,$182
  428. copcol    dc.w 0,$184,0,$186,0,$188,0,$18a,0,$18c,0,$18e,0
  429.     dc.w $190,0,$192,$ddd,$194,$777,$196,$222,$198,0,$19a,0
  430.     dc.w $19c,0,$19e,0
  431.     dc.w $e0,3,$e8,3,$f0,3,$e4,4,$ec,4,$f4,4,$e2
  432. copscr    dc.w 0,$ea,$28,$f2,$50,$e6,0,$ee,$28,$f6,$50
  433.     dc.w $3001,$fffe,$100,$6600,$180,$ff0,$3101,$fffe,$180,0
  434.     dc.w $f001,$fffe,$100,$200,$180,$ff0,$f101,$fffe,$180,0
  435.     dc.w $ffff,$fffe
  436.  
  437. coords    dc.w -100,0,0,100,0,90,100,0,-90,80,70,0
  438.  
  439. ;1:alap 2:alap+$28 3:alap,alap+$28 4:alap+$50 5:alap,alap+$50 
  440. ;6:alap+$28,alap+$50 7:alap,alap+$28,alap+$50
  441. meghat    dc.w 4
  442.     dc.l 2,kot1,1,$00540000
  443.     dc.l 2,kot2,2,$00540004
  444.     dc.l 2,kot4,4,$0038000c
  445.     dc.l 2,kot3,3,$00540008
  446.     
  447. kot1    dc.w 0,4,8,0
  448. kot2    dc.w 4,0,12,4
  449. kot3    dc.w 12,0,8,12
  450. kot4    dc.w 8,4,12,8
  451. ;                         kek
  452. colors    dc.w 6,7,8,9,10,11,12,13,14,15,$11f,$22f,$33f,$44f
  453. ;                         piros
  454.     dc.w $600,$700,$800,$900,$a00,$b00
  455.     dc.w $c00,$d00,$e00,$f00,$f11,$f22,$f33,$f44
  456. ;                         zold
  457.     dc.w $60,$70,$80,$90,$a0,$b0,$c0,$d0,$e0,$f0
  458.     dc.w $f1,$f2,$f3,$f4
  459. ;              sarga
  460.     dc.w $660,$770,$880,$990,$aa0,$bb0,$cc0
  461.     dc.w $dd0,$ee0,$ff0,$ff1,$ff2,$ff3,$ff4
  462. ;              lila    
  463.     dc.w $303,$404,$505,$606,$707,$808,$909,$a0a,$b0b,$c0c
  464.     dc.w $d0d,$e0e,$f0f
  465. ;              cyan
  466.     dc.w 0,$11,$22,$33,$44,$55,$66,$77,$88,$99,$aa,$bb,$cc,$dd,$ee,$ff
  467. ;              feher    
  468.     dc.w 0,$111,$222,$333,$444,$555,$666,$777,$888,$999,$aaa,$bbb,$ccc
  469.     dc.w $ddd,$eee,$fff
  470.  
  471.  
  472. addx    dc.w 240             ;xangle 
  473. addy    dc.w 0            ;yangle
  474. addz    dc.w 0             ;zangle
  475. lap    dc.w 0             ;siklapok szama/object
  476. scr    dc.l 0             ;kepernyo
  477. col    dc.l 0             ;color , coppercolor
  478. numi    dc.l $1b3
  479. lass    dc.w 5
  480. erno    dc.l $38000        ;kepernyo
  481. erny    dc.l $48000
  482. sinus    incbin        "Coleccion_Sources1:Sources/Vectores/raytr.dat"
  483. szor    blk.w $1002,0
  484. scoord    blk.w 256,0
  485. tarolo1    blk.w 200,0
  486. tarolo2    blk.w 100,0
  487. tarolo3 blk.w 50,0
  488. tarolo4    blk.w 50,0
  489.